package com.hhf.rpc.core.serializer;

import com.hhf.rpc.core.serializer.Serializer;
import com.hhf.rpc.core.serializer.SerializerKey;
import com.hhf.rpc.core.serializer.impl.HessianSerializer;
import com.hhf.rpc.core.serializer.impl.JdkSerializer;
import com.hhf.rpc.core.serializer.impl.JsonSerializer;
import com.hhf.rpc.core.serializer.impl.KryoSerializer;
import com.hhf.rpc.core.spi.SpiLoader;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author hhf
 * @Date 2024/10/16
 * @Description 序列化器工厂,用于获取序列化实例(单例 + 工厂 实现)
 */
public class SerializerFactory {

    /**
     * 初始化 序列化map,实现单例模式
     */
//    private static final Map<String, Serializer> KEY_SERIALIZER_MAP = new HashMap<>(){{
//        put(SerializerKey.JDK,new JdkSerializer());
//        put(SerializerKey.JSON,new JsonSerializer());
//        put(SerializerKey.KRYO,new KryoSerializer());
//        put(SerializerKey.HESSIAN,new HessianSerializer());
//    }};

    /**
     * 初始化加载Serializer.class
     */
//    static {
//        SpiLoader.load(Serializer.class);
//    }
    /**
     * 懒加载,只有执行getSerializerInstance()方法获取实例时才进行加载
     */

    /**
     * 默认序列化器
     */
//    private static final Serializer DEFAULT_SERIALIZER = KEY_SERIALIZER_MAP.get(SerializerKey.JDK);
    private static final Serializer DEFAULT_SERIALIZER = new JdkSerializer();

    /**
     * 从map获取实例
     */
//    public static Serializer getSerializerInstance(String key){
//        return KEY_SERIALIZER_MAP.getOrDefault(key,DEFAULT_SERIALIZER);
//    }
    public static Serializer getSerializerInstance(String key){
        return SpiLoader.getInstance(Serializer.class,key);
    }
}
